package com.htd.base.common.config;

import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

/**
 * @author wq
 * 切面控制，拦截所有针对impl包下的类的直接调用
 */
@Aspect
@Component
@Slf4j
public class InterfaceAccessAspect {

    // 定义切点，匹配 impl 包下的所有方法
    @Pointcut("execution(* com.htd.base.modules.translate.service.impl.*.*(..))")
    public void implPackagePointcut() {
        // 该方法正文为空，因为它的作用仅仅是作为切点
    }

    // 定义前置通知，防止直接调用 impl 包下的方法
    @Before("implPackagePointcut()")
    public void beforeAccessToImpl() {
        log.warn("[Trans. plugin] Strongly recommend calling through the *IF interface！");
        // 抛出异常，阻止调用
        //throw new BaseException("Prohibit direct calling of implementation classes, please request through Interface(Classes ending in *IF)  ");
    }
}
